package main

import (
	"fmt"
	"math"
)

// ---------------------- 新系统标准接口（目标接口） ----------------------
type CelsiusSensor interface {
	GetCelsius() float64 // 获取摄氏度温度
}

// ---------------------- 新版摄氏度传感器（直接兼容） ----------------------
type NewCelsiusSensor struct {
	temp float64
}

func (s *NewCelsiusSensor) GetCelsius() float64 {
	return s.temp
}

// ---------------------- 旧版华氏度传感器（被适配者） ----------------------
type FahrenheitSensor struct {
	temp float64
}

func (s *FahrenheitSensor) GetFahrenheit() float64 {
	return s.temp // 旧设备直接返回华氏度
}

// ---------------------- 华氏转摄氏适配器（核心） ----------------------
type FahrenheitAdapter struct {
	sensor *FahrenheitSensor // 封装旧设备
}

// 实现目标接口
func (a *FahrenheitAdapter) GetCelsius() float64 {
	f := a.sensor.GetFahrenheit()
	c := (f - 32) * 5 / 9          // 华氏转摄氏公式
	return math.Round(c*100) / 100 // 保留两位小数
}

// ---------------------- 客户端调用 ----------------------
func main() {
	// 场景1：使用新版传感器
	newSensor := &NewCelsiusSensor{temp: 26.5}
	fmt.Printf("新设备温度: %.1f°C\n", newSensor.GetCelsius())

	// 场景2：整合旧版传感器
	oldSensor := &FahrenheitSensor{temp: 79.7} // 79.7°F ≈ 26.5°C
	adapter := &FahrenheitAdapter{sensor: oldSensor}
	fmt.Printf("旧设备转换后温度: %.1f°C\n", adapter.GetCelsius())
}
